﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ComObjFlags()</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>


<h1>ComObjFlags() <span class="ver">[v1.0.96.00+]</span></h1>
<p>获取或改变控制 COM 包装器对象行为的标志.</p>
<pre class="Syntax">Flags := ComObjFlags(ComObject [, NewFlags, Mask])</pre>

<h3>参数</h3>
<table class="info">
  <tr>
    <td>ComObject</td>
    <td>COM 包装器对象.</td>
  </tr>
  <tr>
    <td>NewFlags</td>
    <td>由 <I>Mark</I> 标识的新标志值, 或要添加或移除的标志.</td>
  </tr>
  <tr>
    <td>Mask</td>
    <td>需要改变的标志位掩码.</td>
  </tr>
  <tr>
    <td>Flags</td>
    <td><I>ComObject</I> 的所有标志 (如果指定了 <I>NewFlags</I>, 则为应用后的新标志).</td>
  </tr>
</table>

<h3>标志</h3>
<table class="info">
  <tr>
    <td>F_OWNVALUE<br>1</td>
    <td>当前仅对 SafeArray 有效.如果设置了此标志, 则当包装器对象释放时销毁 SafeArray.由于 SafeArray 没有引用计数结构, 如果含有此标志的 SafeArray 被赋值为另一个 SafeArray 的元素时, 会创建一个独立的副本.</td>
  </tr>
</table>

<h3>一般说明</h3>
<p>如果省略 <I>Mark</I>, NewFlags 指定需要添加 (为正数时) 或移除 (为负数时) 的标志.例如, <code>ComObjFlags(obj, -1)</code> 移除 F_OWNVALUE 标志.不要在 Mark 中指定除 0 或 1 外的其他值, 所有其他位保留供将来使用.</p>

<h3>相关</h3>
<p><a href="ComObjActive.htm">ComObjActive</a>, <a href="ComObjArray.htm">ComObjArray</a></p>

<h3>示例</h3>
<pre class="NoIndent"><em>; 示例:检查 F_OWNVALUE 标志是否存在.</em>

arr := ComObjArray(0xC, 1)
if ComObjFlags(arr) &amp; 1
    MsgBox arr will be automatically destroyed.
else
    MsgBox arr will not be automatically destroyed.
</pre>

<pre class="NoIndent"><em>; 示例:改变内嵌在其他数组中的数组的行为.</em>

arr1 := ComObjArray(0xC, 3)
arr2 := ComObjArray(0xC, 1)
arr2[0] := "original value"
arr1[0] := arr2         <em>; 赋值隐式副本.</em>
ComObjFlags(arr2, -1)   <em>; 移除 F_OWNVALUE.</em>
arr1[1] := arr2         <em>; 赋值为原始数组.</em>
arr1[2] := arr2.Clone() <em>; 赋值显式副本.</em>
arr2[0] := "new value"
for arr in arr1
    MsgBox % arr[0]

arr1 := ""
<em>; 由于 arr2 == arr1[1] 所以后面这句无效, 它已经被销毁了: 
;  arr2[0] := &quot;foo&quot;</em>
</pre>

</body>
</html>
